import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15

ApplicationWindow {
    id: root
    width: Screen.width > 1000 ? 1600 : 800
    height: Screen.height > 1000 ? 2560 : 741
    visible: true
    title: "FrameLessScale"
    
    // 根据屏幕大小计算缩放因子
    readonly property real scaleFactor: width > 1000 ? 2.0 : 1.0
    
    // 内容区域属性（用于缩放）
    property real contentWidth: Screen.width > 1000 ? 1600 : 800
    property real contentHeight: Screen.height > 1000 ? 2560 : 741
    property int borderWidth: 10 * scaleFactor  // 边框宽度，用于检测拖拽区域
    property int minWidth: 400 * scaleFactor
    property int minHeight: 300 * scaleFactor
    
    // 鼠标状态
    property bool isResizing: false
    property point resizeStartPos: Qt.point(0, 0)
    property rect resizeStartRect: Qt.rect(0, 0, 0, 0)
    property int resizeEdge: 0  // 0=none, 1=left, 2=top, 4=right, 8=bottom
    
    // 鼠标位置检测（相对于内容区域）
    function getResizeEdge(mouseX, mouseY) {
        var edge = 0
        // 检测是否在边框区域内
        if (mouseX <= borderWidth) edge |= 1  // Left
        if (mouseY <= borderWidth) edge |= 2   // Top
        if (mouseX >= contentWidth - borderWidth) edge |= 4  // Right
        if (mouseY >= contentHeight - borderWidth) edge |= 8  // Bottom
        return edge
    }
    
    // 内容区域（可缩放）
    Item {
        id: contentArea
        anchors.fill: parent  // 填充整个窗口，确保所有区域可见

    Rectangle {
            anchors.fill: parent
            color: "#f0f0f0"
            
            // 主分割器（水平）- 使用SplitView实现可拖动
            SplitView {
                id: splitterMain
                anchors.fill: parent
                orientation: Qt.Horizontal
                
                // 左侧区域（包含垂直分割器）- 比例3
                SplitView {
                    id: leftContainer
                    SplitView.minimumWidth: 400 * scaleFactor  // 增大最小宽度，确保可见
                    SplitView.preferredWidth: 600 * scaleFactor  // 设置固定首选宽度，确保可见
                    SplitView.fillHeight: true  // 确保填充SplitView的高度
                    orientation: Qt.Vertical  // 垂直方向，用于区域1、2、3之间的分割
                    
                    // 顶部区域（绿色）- 比例1
                    Rectangle {
                        id: area1
                        SplitView.minimumHeight: 200 * scaleFactor
                        SplitView.preferredHeight: 300 * scaleFactor
                        color: "#00FF00"  // 亮绿色，确保可见
                        clip: false  // 确保不裁剪分割器
                        
                        // 使用内部Rectangle绘制边框，避免遮挡SplitView分割器
                        Rectangle {
                            anchors.fill: parent
                            anchors.margins: 2  // 边框宽度
                            color: "transparent"
                            border.color: "#FF0000"  // 红色边框
                            border.width: 2
                        }
                        
                        Text {
                            anchors.centerIn: parent
                            text: "区域1"
                            font.pixelSize: 32  // 增大字体
                            font.bold: true
                            color: "#000000"
                        }
                    }
                    
                    // 中间区域（红色）- 比例4
                    Rectangle {
                        id: area2
                        SplitView.minimumHeight: 200 * scaleFactor
                        SplitView.fillHeight: true  // 填充剩余空间
                        color: "#FF0000"
                        border.color: "#cccccc"
                        border.width: 1
                        
                        Text {
                            anchors.centerIn: parent
                            text: "区域2"
                            font.pixelSize: 16 * scaleFactor
                            color: "#FFFFFF"
                        }
                    }
                    
                    // 底部区域（蓝色）- 比例1
                    Rectangle {
                        id: area3
                        SplitView.minimumHeight: 200 * scaleFactor
                        SplitView.preferredHeight: 300 * scaleFactor
                        color: "#0000FF"  // 亮蓝色，确保可见
                        clip: false  // 确保不裁剪分割器
                        
                        // 使用内部Rectangle绘制边框，避免遮挡SplitView分割器
                        Rectangle {
                            anchors.fill: parent
                            anchors.margins: 2  // 边框宽度
                            color: "transparent"
                            border.color: "#FF0000"  // 红色边框
                            border.width: 2
                        }
                        
                        Text {
                            anchors.centerIn: parent
                            text: "区域3"
                            font.pixelSize: 32  // 增大字体
                            font.bold: true
                            color: "#FFFFFF"
                        }
                    }
                }
                
                // 中间区域（黑色）- 比例3
                Rectangle {
                    id: area4
                    SplitView.minimumWidth: 100 * scaleFactor
                    SplitView.preferredWidth: parent.width * 3 / 7  // 比例3
                    color: "#000000"
                    border.color: "#cccccc"
                    border.width: 1
                    
                    Text {
        anchors.centerIn: parent
                        text: "区域4"
                        font.pixelSize: 16 * scaleFactor
                        color: "#FFFFFF"
                    }
                }
                
                // 右侧区域（黄色）- 比例1
                Rectangle {
                    id: area5
                    SplitView.minimumWidth: 100 * scaleFactor
                    SplitView.fillWidth: true
                    color: "#FFFF00"
                    border.color: "#cccccc"
                    border.width: 1

        Text {
            anchors.centerIn: parent
                        text: "区域5"
                        font.pixelSize: 16 * scaleFactor
                        color: "#000000"
        }
    }
            }
        }
        
        // 鼠标区域（用于检测窗口边缘缩放）
        MouseArea {
            id: windowMouseArea
            anchors.fill: parent
            acceptedButtons: Qt.LeftButton
            hoverEnabled: true
            cursorShape: Qt.ArrowCursor  // 默认光标
            propagateComposedEvents: true  // 允许事件传递给子元素（SplitView）
            z: -1  // 确保在SplitView之下，不阻止SplitView的拖动
            
            onPositionChanged: {
                if (isResizing) {
                    // 处理内容区域缩放
                    var deltaX = mouse.x - resizeStartPos.x
                    var deltaY = mouse.y - resizeStartPos.y
                    var newWidth = resizeStartRect.width
                    var newHeight = resizeStartRect.height
                    
                    if (resizeEdge & 1) {  // Left
                        newWidth = resizeStartRect.width - deltaX
                        if (newWidth < minWidth) {
                            newWidth = minWidth
                        }
                    }
                    if (resizeEdge & 2) {  // Top
                        newHeight = resizeStartRect.height - deltaY
                        if (newHeight < minHeight) {
                            newHeight = minHeight
                        }
                    }
                    if (resizeEdge & 4) {  // Right
                        newWidth = resizeStartRect.width + deltaX
                        if (newWidth < minWidth) newWidth = minWidth
                    }
                    if (resizeEdge & 8) {  // Bottom
                        newHeight = resizeStartRect.height + deltaY
                        if (newHeight < minHeight) newHeight = minHeight
                    }
                    
                    // 设置内容区域大小
                    contentWidth = newWidth
                    contentHeight = newHeight
                } else {
                    // 更新鼠标光标（相对于内容区域）
                    var edge = getResizeEdge(mouse.x, mouse.y)
                    if (edge === 0) {
                        // 不在边缘区域，恢复默认光标，让SplitView处理拖动
                        cursorShape = Qt.ArrowCursor
                    } else {
                        // 在边缘区域，更新光标
                        var newCursor = Qt.ArrowCursor
                        if ((edge & 3) === 3) {  // TopLeft (1 | 2)
                            newCursor = Qt.SizeFDiagCursor
                        } else if ((edge & 6) === 6) {  // TopRight (2 | 4)
                            newCursor = Qt.SizeBDiagCursor
                        } else if ((edge & 9) === 9) {  // BottomLeft (1 | 8)
                            newCursor = Qt.SizeBDiagCursor
                        } else if ((edge & 12) === 12) {  // BottomRight (4 | 8)
                            newCursor = Qt.SizeFDiagCursor
                        } else if (edge & 1) {  // Left
                            newCursor = Qt.SizeHorCursor
                        } else if (edge & 2) {  // Top
                            newCursor = Qt.SizeVerCursor
                        } else if (edge & 4) {  // Right
                            newCursor = Qt.SizeHorCursor
                        } else if (edge & 8) {  // Bottom
                            newCursor = Qt.SizeVerCursor
                        }
                        
                        // 更新MouseArea的光标
                        if (cursorShape !== newCursor) {
                            cursorShape = newCursor
                        }
                    }
                }
            }
            
            onPressed: {
                var edge = getResizeEdge(mouse.x, mouse.y)
                if (edge !== 0) {
                    // 开始缩放
                    isResizing = true
                    resizeEdge = edge
                    resizeStartPos = Qt.point(mouse.x, mouse.y)
                    resizeStartRect = Qt.rect(0, 0, contentWidth, contentHeight)
                    mouse.accepted = true  // 接受事件，阻止传递给SplitView
                } else {
                    // 如果不是在边缘，不处理事件，让SplitView处理
                    mouse.accepted = false  // 不接受事件，让事件传递给SplitView
                }
            }
            
            onReleased: {
                isResizing = false
                resizeEdge = 0
                cursorShape = Qt.ArrowCursor
            }
            
            onExited: {
                if (!isResizing) {
                    cursorShape = Qt.ArrowCursor
                }
            }
        }
    }
}
